Various programs can invoke your choice of editor to edit a
particular piece of text. For instance, version control programs
invoke an editor to enter version control logs (see Version Control), and
the Unix mail utility invokes an editor to enter a
message to send. By convention, your choice of editor is
specified by the environment variable EDITOR. If you
set EDITOR to ‘emacs’,
Emacs would be invoked, but in an inconvenient way—by
starting a new Emacs process. This is inconvenient because the
new Emacs process doesn’t share buffers, a command history,
or other kinds of information with any existing Emacs
process.
You can solve this problem by setting up Emacs as an edit server, so that it “listens” for external edit requests and acts accordingly. There are two ways to start an Emacs server:
server-start in an existing Emacs process: either
type M-x server-start, or put the expression
(server-start) in your init file (see Init File). The existing Emacs
process is the server; when you exit Emacs, the server dies
with the Emacs process.server-start after initialization, and returns
control to the calling terminal instead of opening an initial
frame; it then waits in the background, listening for edit
requests.Either way, once an Emacs server is started, you can use a
shell command called emacsclient to connect to the
Emacs process and tell it to visit a file. You can then set the
EDITOR environment variable to
‘emacsclient’, so that external programs
will use the existing Emacs process for editing.19
You can run multiple Emacs servers on the same machine by
giving each one a unique server name, using the variable
server-name. For example, M-x set-variable
RET server-name RET "foo" RET sets
the server name to ‘foo’. The
emacsclient program can specify a server by name,
using the ‘-s’ option (see emacsclient
Options).
If you want to run multiple Emacs daemons (see Initial Options), you can give each daemon its own server name like this:
emacs --eval "(setq server-name \"foo\")" --daemon
If you have defined a server by a unique server name, it is
possible to connect to the server from another Emacs instance and
evaluate Lisp expressions on the server, using the
server-eval-at function. For instance,
(server-eval-at "foo" '(+ 1 2)) evaluates the
expression (+ 1 2) on the
‘foo’ server, and returns
3. (If there is no server with that name, an error
is signaled.) Currently, this feature is mainly useful for
developers.
| • Invoking emacsclient: | Connecting to the Emacs server. | |
| • emacsclient Options: | Emacs client startup options. |
Some programs use a different environment variable; for
example, to make TeX use
‘emacsclient’, set the
TEXEDIT environment variable to
‘emacsclient +%d %s’.